嗨大家好,我是Sean!
昨天我們講到CRUD的R的延伸使用,今天我們就來把CRUD全部結束!
update的前提是我們已經可以選出單一筆的資料。我們在前面的list的部分,已經可以做到這件事。
但我們其實可以運用之前有介紹過的generics api view,使用複合功能的api view來達成這件事。
另一方面也是展現RESTful api的強大之處,利用無狀態的特性,接收request中的method來改變功能。
update的功能,可以使用post或update的方法來實踐,我們的做法是選擇用put的method來做。
我們可以使用我們之前已經寫完的model以及serializer,引用他們便可以完成我們api了。
from .models import People
from .serializers import PeopleSerializer
from rest_framework import generics
class PeopleUpdateAPIView(generics.RetrieveUpdateAPIView):
queryset = People.objects.all()
serializer_class = PeopleSerializer
完成以上的功能,接著在寫完我們路徑後,就可以來啟動網頁來試試看api的效果。
特別值得一提的是,當我們使用update的api時,我們在路徑中加入參數,讓api可以直接依照pk(primary key)找到我們想找到的資料。
在路徑中加入參數的方法,如下方所示:
urlpatterns = [
path('admin/', admin.site.urls),
...,
path('api/data/update/<int:pk>', PeopleUpdateAPIView.as_view(), name='api-data-update'),
# 我們新增路徑,在update後加入 /<int:pk>
]
接著再啟動我們的網頁,到達我們剛剛所添加的路徑。
get的method直接return給我們pk=1的那筆data,而在下方form的部分,表格內已經幫我們填好了現有的data。
我們可以在api的頁面,直接update這筆資料的內容,藉由下方的put按鈕。
依照慣例這樣對我們來說是不夠的,我們一樣用Postman做一次示範api測試。
如果直接使用get的話,一樣是回傳這筆資料。唯一的差別只是Postman上是JSON的格式。
那麼,我們現在改變method為put,來做這筆資料update
我們複製剛剛JSON格式的資料,將它貼上在BODY的地方,再把形式選成raw以及JSON。
我們再更改JSON格式中的資料,就可以輕易地做到update的功能了。
如畫面所示,我們將age從20改到了25,我們再往下送出請求看看。
送出請求後,我們可以看到下面的response已經更新了變成25!這麼一來,update就已經成功了。
刪除的作法其實與更新大同小異,同樣的前提是,它也需要先選取個別的資料,才能指定資料做刪除。
但我們甚至可以用上面的做法,新增有Delete的api view就可以成功使用刪除的功能了!
就像以下這樣,只需要將請求的method改為delete就可以完成了:
from .models import People
from .serializers import PeopleSerializer
from rest_framework import generics
class PeopleUpdateAPIView(generics.RetrieveUpdateDeleteAPIView): # 新增delete
queryset = People.objects.all()
serializer_class = PeopleSerializer
那麼,我們今天的文章就先到此結束囉!
我是Sean,你各位海上的人,我們明天見!